using System;
using System.Collections.Generic;
using System.Text;
using EntidadesTO;
using System.Data;
using System.Data.SqlClient;

namespace AccesoDatos
{
    public class DetalleInfoPredioDA
    {
        public void GuardarNuevo(DetalleInfoPredioTO pDetalleInfoPredio)
        {

            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_ins_SEC_DetalleInfoPredio", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumeroNivel", pDetalleInfoPredio.NumeroNivel);
                comando.Parameters.AddWithValue("@pNumJurada", pDetalleInfoPredio.NumJurada);
                comando.Parameters.AddWithValue("@pAntiguedad", pDetalleInfoPredio.Antiguedad);
                comando.Parameters.AddWithValue("@pAreaConstruida", pDetalleInfoPredio.AreaConstruida);
                comando.Parameters.AddWithValue("@pAreaComun", pDetalleInfoPredio.AreaComun);
                comando.Parameters.AddWithValue("@pDescripcion", pDetalleInfoPredio.Descripcion);
                comando.Parameters.AddWithValue("@pCantidadUniInstalacion", pDetalleInfoPredio.CantidadUniInstalacion);
                comando.Parameters.AddWithValue("@pAnoInstalacion", pDetalleInfoPredio.AnhoInstalacion);
                comando.Parameters.AddWithValue("@pCodClasificacion", pDetalleInfoPredio.CodClasificacion);
                comando.Parameters.AddWithValue("@pCodEstado", pDetalleInfoPredio.CodEstado);
                comando.Parameters.AddWithValue("@pCodMaterial", pDetalleInfoPredio.CodMaterial);
                comando.Parameters.AddWithValue("@pCodEstadoOtras", pDetalleInfoPredio.CodEstadoOtras);

                comando.CommandType = CommandType.StoredProcedure;

                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }
        }

        public void Eliminar(int pNumJurada)
        {

            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {
                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_del_SEC_DetalleInfoPredio", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumJurada", pNumJurada);

                comando.CommandType = CommandType.StoredProcedure;

                comando.ExecuteNonQuery();

                instanciaConexion.CerrarConexion();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }
        }


        public List<DetalleInfoPredioTO> BuscarDetalleInfoPredioLlave(int numJurada)
        {
            List<DetalleInfoPredioTO> listaDetalleInfoPredio = new List<DetalleInfoPredioTO>();
            SqlDataReader reader = null;
            SqlCommand comando;
            ConexionBD instanciaConexion = ConexionBD.ObtenerInstancia();

            try
            {

                instanciaConexion.AbrirConexion();
                comando = new SqlCommand("sp_get_SEC_DetalleInfoPredio_key", instanciaConexion.ObtenerConexion());
                comando.Parameters.AddWithValue("@pNumJurada", numJurada);

                comando.CommandType = CommandType.StoredProcedure;

                reader = comando.ExecuteReader();
                while (reader.Read())
                {   

                    DetalleInfoPredioTO detalleInfoPredioTO = new DetalleInfoPredioTO();
                    detalleInfoPredioTO.NumeroNivel = reader.GetInt32(reader.GetOrdinal("numeroNivel"));
                    detalleInfoPredioTO.Antiguedad = reader.GetInt32(reader.GetOrdinal("antiguedad"));
                    detalleInfoPredioTO.AreaConstruida = reader.GetDecimal(reader.GetOrdinal("areaConstruida"));
                    
                    detalleInfoPredioTO.CodClasificacion = reader.GetInt32(reader.GetOrdinal("codClasificacion"));
                    detalleInfoPredioTO.CodEstado = reader.GetInt32(reader.GetOrdinal("codEstado"));
                    detalleInfoPredioTO.CodMaterial = reader.GetInt32(reader.GetOrdinal("codMaterial"));
                    detalleInfoPredioTO.NumJurada = reader.GetInt32(reader.GetOrdinal("numJurada"));
                    detalleInfoPredioTO.DesEstado = reader.GetString(reader.GetOrdinal("desEstado"));
                    detalleInfoPredioTO.DesMaterial = reader.GetString(reader.GetOrdinal("desMaterial"));
                    detalleInfoPredioTO.DesClasificacion = reader.GetString(reader.GetOrdinal("desClasificacion"));
                    detalleInfoPredioTO.CodCategoriaMuro = reader.GetInt32(reader.GetOrdinal("codCategoriaMuro"));
                    detalleInfoPredioTO.CodCategoriaTecho = reader.GetInt32(reader.GetOrdinal("codCategoriaTecho"));
                    detalleInfoPredioTO.CodCategoriaPiso = reader.GetInt32(reader.GetOrdinal("codCategoriaPiso"));
                    detalleInfoPredioTO.CodCategoriaPuerta = reader.GetInt32(reader.GetOrdinal("codCategoriaPuerta"));
                    detalleInfoPredioTO.CodCategoriaRevestimiento = reader.GetInt32(reader.GetOrdinal("codCategoriaReves"));
                    detalleInfoPredioTO.CodCategoriaBano = reader.GetInt32(reader.GetOrdinal("codCategoriaBano"));
                    detalleInfoPredioTO.CodCategoriaInstalaciones = reader.GetInt32(reader.GetOrdinal("codCategoriaIns"));
                    
                    //Valores opcionales
                    if (reader.GetValue(reader.GetOrdinal("areaComun")) == DBNull.Value)
                        detalleInfoPredioTO.AreaComun = 0;
                    else
                        detalleInfoPredioTO.AreaComun = reader.GetDecimal(reader.GetOrdinal("areaComun"));

                    if (reader.GetValue(reader.GetOrdinal("descripcion")) == DBNull.Value)
                        detalleInfoPredioTO.Descripcion = "-1";
                    else
                        detalleInfoPredioTO.Descripcion = reader.GetString(reader.GetOrdinal("descripcion"));

                    if (reader.GetValue(reader.GetOrdinal("cantidadUniInstalacion")) == DBNull.Value)
                        detalleInfoPredioTO.CantidadUniInstalacion = -1;
                    else
                        detalleInfoPredioTO.CantidadUniInstalacion = reader.GetDecimal(reader.GetOrdinal("cantidadUniInstalacion"));

                    if (reader.GetValue(reader.GetOrdinal("anoInstalacion")) == DBNull.Value)
                        detalleInfoPredioTO.AnhoInstalacion = -1;
                    else
                        detalleInfoPredioTO.AnhoInstalacion = reader.GetInt32(reader.GetOrdinal("anoInstalacion"));

                    if (reader.GetValue(reader.GetOrdinal("codEstadoOtras")) == DBNull.Value)
                        detalleInfoPredioTO.CodEstadoOtras = -1;
                    else
                        detalleInfoPredioTO.CodEstadoOtras = reader.GetInt32(reader.GetOrdinal("codEstadoOtras"));

                    listaDetalleInfoPredio.Add(detalleInfoPredioTO);
                }

                reader.Close();
                instanciaConexion.CerrarConexion();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                listaDetalleInfoPredio = null;

            }
            finally
            {
                if (reader != null)
                {
                    if (reader.IsClosed == false)
                        reader.Close();
                }
                if (instanciaConexion.ObtenerConexion().State != ConnectionState.Closed)
                {
                    instanciaConexion.CerrarConexion();
                }
            }

            return listaDetalleInfoPredio;

        }
    }
}
